package pe.intix.drawback.model;

import java.util.Date;
import java.util.Collection;

import javax.persistence.*;

import org.openxava.annotations.*;
import org.openxava.jpa.*;
import org.openxava.model.Identifiable;
import org.openxava.util.*;

import pe.intix.drawback.util.*;

/**
 * @author Jeromy Altuna
 * @author Renato
 */
@Entity
@View(members="""
		fecha, imagenes, hayImagen;
		proveedor; 
		detalleDeclaracion; 
		observaciones"""
)
@Tab(properties="fecha, proveedor.razonSocial, observaciones, hayImagen")
@Table(name = "declaracion_jurada")
class DeclaracionJurada extends ConImagenes{

	//@Hidden
	@Id @GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id_declaracion")
	Long id
	
	@Required
	@Column(name = "fecha")
	@Temporal(TemporalType.TIMESTAMP)
	Date fecha

	@Stereotype("MEMO")
	@Column(name = "observaciones")
	String observaciones

	@Required
	@JoinColumn(name = "id_proveedor", referencedColumnName = "id_proveedor")
	@ManyToOne
	Proveedor proveedor
	
	@EditAction("")
	@ListProperties("""
		detalleComprobantePago.comprobantePago.fecha, 
		detalleComprobantePago.comprobantePago.serie, 
		detalleComprobantePago.comprobantePago.numero, 
		cantidad, saldoKardex,
		detalleComprobantePago.producto.descripcion,
		duaImportacion, serie, fechaDua"""
	)
	@OneToMany(mappedBy = "declaracionJurada", cascade = CascadeType.ALL)
	Collection<DetalleDeclaracionJurada> detalleDeclaracion = new ArrayList<>()	
}
